/*
 * Representa una imagen durante el proceso de carga de imagenes a la base
 */

package tp_imag.model;

/**
 *
 * @author gdenari
 */
public class ImageItem {

    private final static char SEPARATOR = '\\';
    
    private final static char EXTENSION_SEP = '.';

    private final static String EXTENSION = ".jpg";

    private String directory;

    /* Nombre del archivo de la imagen sin la extension */
    private String name;

    /* Indica si la foto ya fue binarizada y copiada al directorio
     temporal de imagenes binarizadas */
    private boolean imageProccessed;

    /* Indica si la imagen fue modificada por el usuario (filtros, recortes, etc) */
    private boolean imageModified;

    /* Indica si se ha obtenido el binarizado de la imagen o no*/
    private boolean imageBinarized;
    
     /**
     * This class assumes that the string used to initialize fullPath has a
     * directory path, filename, and extension. The methods won't work if it
     * doesn't.
     */
    class Filename {
      private String fullPath;
      private char pathSeparator, extensionSeparator;

      public Filename(String str, char sep, char ext) {
        fullPath = str;
        pathSeparator = sep;
        extensionSeparator = ext;
      }

      public String extension() {
        int dot = fullPath.lastIndexOf(extensionSeparator);
        return fullPath.substring(dot + 1);
      }

      public String filename() { // gets filename without extension
        int dot = fullPath.lastIndexOf(extensionSeparator);
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(sep + 1, dot);
      }

      public String path() {
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(0, sep);
      }
    }

    /**
     * Constructor
     *
     * @param path
     */
    public ImageItem(String directory, String fileName) {
        this.directory = directory;
        imageProccessed = false;
        imageModified = false;
        imageBinarized = false;

        Filename filename = new Filename(directory + SEPARATOR + fileName, SEPARATOR, EXTENSION_SEP);
        name = filename.filename();
    }

    public boolean isImageProccessed() {
        return imageProccessed;
    }

    public void setImageProccessed(boolean imageProccessed) {
        this.imageProccessed = imageProccessed;
    }

    public boolean isModified() {
        return imageModified;
    }

    public void setImageModified(boolean modified) {
        this.imageModified = modified;
    }

    public boolean isImageBinarized(){
    	return this.imageBinarized;
    }
    
    public void setImageBinarized(boolean binarized){
    	this.imageBinarized = binarized;
    }
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPath() {
        return this.directory + SEPARATOR + this.name + EXTENSION;
    }

    public void setPath(String path) {
        Filename filename = new Filename(path, SEPARATOR, EXTENSION_SEP);
        name = filename.filename();
    }
    
    public String getDirectory(){
    	return this.directory;
    }
    
    public void setDirectory(String directory){
    	this.directory = directory;
    }

    /* Devuelve la ruta de la imagen binarizada, y nulo si la imagen no ha sido
     * binarizada aun.
     *
     * Este es el metodo que hay que modificar cuando se guarden las imagenes
     * en la carpeta temporal
     *
     */
    public String getBinarizedImagePath() {
    	if (this.imageBinarized) {
    		return getDirectory() + SEPARATOR + "temp" + SEPARATOR + name + "Bin" + EXTENSION;
    	}
        else{

        }
    	return null;
    }

}
